Customers seeking to host and execute applications and web services often utilize networks of computers and storage resources provided by computing resource service providers. However, it becomes challenging for a developer to design computer applications in such a way as to minimize latency and optimize scalability when deployed to distributed systems such as by having to explicitly code different implementations for in-memory transient storage, out-of-process transient storage, and out-of-process persistent storage. Furthermore, in determining a backend resource for shared data storage, a developer often must manually include shared resource identifier information such that all components within the distributed system can locate the shared storage. Moreover, the developer often must also manually provide details on how each subsystem coordinates work such that the shared storage is never in an invalid state.